package com.tbit.uqbike.client.service;

import com.tbit.uqbike.client.pojo.AdAccountFee;
import com.tbit.uqbike.client.pojo.Park;
import com.tbit.uqbike.client.pojo.RideLog;

/**
 * 中途停车service
 *
 * @author Leon
 * 2017年2月24日 下午4:09:17
 */
public interface ParkService {
    /**
     * 根据用户id查询
     *
     * @param userId
     * @return
     */
    Park getByUserId(Integer userId);

    /**
     * 根据设备id查询
     *
     * @param machineId
     * @return
     */
    Park getByMachineId(Integer machineId);

    /**
     * 添加
     *
     * @param park
     */
    void insert(Park park);

    /**
     * 根据用户id删除
     *
     * @param userId
     */
    void delByUserId(Integer userId);

    /**
     * 添加日志
     *
     * @param park
     */
    void addLog(Park park);

    /**
     * 中途停车
     *
     * @param serNo            流水号
     * @param ble              是否蓝牙
     * @param userId           用户id
     * @param phonePositionLon 手机经度
     * @param phonePositionLat 手机纬度
     */
    void parkRide(String serNo, Integer userId, Boolean ble, Integer orderSource, Double phonePositionLon, Double phonePositionLat);


    /**
     * 继续骑行
     *
     * @param serNo            流水号
     * @param ble              是否蓝牙
     * @param orderSource      指令来源
     */
    void continueRide(String serNo, Integer userId, Boolean ble, Integer orderSource);

    /**
     * 中途停车计费
     *
     * @param accountFee
     * @param timeMinute
     * @return
     */
    Double parkFee(AdAccountFee accountFee, Integer timeMinute);

    /***
     * 获取当前临时停车数据
     * @param userId
     * @return
     */
    Park getParking(Integer userId);

    /**
     * 获取临时停车费用
     *
     * @param rideLog
     * @return
     */
    Double getParkFee(Park park, RideLog rideLog, AdAccountFee accountFee);

    /**
     * 根据设备编号删除
     *
     * @param machineId
     */
    void delByMachineId(Integer machineId);

    /**
     * 判断单车设备是否在站点
     *
     * @param userId           用户id
     * @param type             判断类型  0=临时停车  1=继续骑行
     * @param phonePositionLon 手机经度
     * @param phonePositionLat 手机纬度
     * @return true 可以继续做某事
     */
    Boolean machinePositionCheck(Integer userId, Integer type, Double phonePositionLon, Double phonePositionLat);

}